// QuestionType.js - 题目类型数据模型
const mongoose = require('mongoose');

// 题目类型模式
const questionTypeSchema = new mongoose.Schema({
  // 类型名称（前端显示用）
  name: {
    type: String,
    required: [true, '类型名称不能为空'],
    trim: true,//  去除空格
    maxLength: [20, '类型名称不能超过20个字符']
  },
  // 表单模板配置
  formTemplate: {
    type: {
      fields: [{
        type: String,
        enum: [
          'content', 
          'options', 
          'answer', 
          'image', 
          'htmlContent', 
          'htmlAnswer', 
          'imageAnswer', 
          'points', 
          'difficulty', 
          'tags', 
          'source'
        ]
      }]
    },
    default: { fields: [] }
  },
  // 软删除标志
  deleted: {
    type: Boolean,
    default: false
  }
}, {
  timestamps: true,
  // 配置JSON序列化
  toJSON: {
    virtuals: true,
    transform: function(doc, ret) {
      delete ret._id; // 因为开了virtuals这个虚拟属性后，他会默认给出一个id，不需要_id了
      delete ret.__v;
      return ret;
    }
  }
});

// 创建唯一索引确保类型名称不重复
questionTypeSchema.index({ name: 1 }, { 
  unique: true
});

/* 索引设计说明：
 * 1. 名称唯一索引：确保题目类型名称不重复
 * 2. 未添加 createdAt 索引：因创建时间查询频率低
 * 3. 添加 deleted 字段用于软删除功能
 */

// 创建软删除索引
questionTypeSchema.index({ deleted: 1 });

// 创建模型
const QuestionType = mongoose.model('QuestionType', questionTypeSchema);

module.exports = QuestionType;